A storage server is a computer system and a form of storage controller that is used to store and retrieve data on behalf of one or more clients on a network. A storage server operates on behalf of one or more clients to store and manage data in a set of mass storage devices, such as magnetic or optical storage-based disks or tapes. A storage server may be configured to service file-level requests from clients, as in the case of file servers used in a Network Attached Storage (NAS) environment. Alternatively a storage server may be configured to service block-level requests from clients, as done by storage servers used in a Storage Area Network (SAN) environment. Further, some storage servers are capable of servicing both file-level and block-level requests, as done by certain storage servers made by NetApp®, Inc. of Sunnyvale, Calif.
A storage server can support multiple protocols in providing storage services to client systems. For example, Network File System (NFS) is one of the protocols that allow files stored in a storage server to be accessed from a network. A storage server that supports the NFS protocol can export a file system contained in the storage server to the external network via one or more mount points. An NFS client system can then mount one of the exported NFS mount points to a storage entity (e.g., a directory or a drive, etc.) local to the client system. With proper authorization, the client system can view and access the storage server's file system through the local storage entity. The files available through the mounted mount point look and act the same as any other files stored in the client system. However, the system resources such as network, CPU, memory, and/or disk I/O throughput that can be allocated to a mount point are limited. Thus, the throughput of an NFS server is often bottlenecked at the mount point.
There are many restrictions in making an NFS server's file system available through NFS mount points. For example, looking-up and subsequent retrieving of a single piece of data cannot be separated and performed through different mount points. In some NFS implementations, even though any files or directory trees can be exported as mount points, a subdirectory under an already exported directory cannot be exported or mounted. An NFS server also cannot export any parent directory of an exported file system, unless the parent directory is located on a different physical device. Because of these restrictions, when a mount point of an NFS server is mapped to an NFS client's local storage entity, all files that are accessible from the mount point are associated only with that mount point, so that these files cannot be exported or accessed via another mount point of the same NFS server. Thus, parallel-transmitting a large file via multiple mount points, though theoretically capable of improving the throughput of the NFS server, is infeasible under a conventional NFS protocol, as the large file is accessible from one and only one mount point.
To improve performance, availability and manageability of a storage solution, individual network storage may be replaced by clusters of storage servers that can be aggregated for providing data services. The aggregated throughput provided by a cluster of storage servers is often significantly higher than the throughputs of the individual network storage servers. However, the conventional NFS protocol does not provide a mechanism that supports multiple servers simultaneously exporting a single file system of a storage server. Even for some NFS implementations that allow the exporting of parents or children of an exported directory, files can still be accessible via only a single server. Thus, the aggregated throughput available in a cluster of storage servers cannot be utilized by NFS clients to increase the performance of an NFS storage solution, or to reduce the bottleneck associated with the NFS mount points. Even though NFS offers simple and cost-effective storage and data sharing, its bandwidth cannot be scaled with the addition of independent servers.
Further, it is often infeasible to eliminate or upgrade NFS storage solutions that are closely integrated with many storage applications because of their popularity. Thus, storage servers are often implemented with cache servers to speed up the retrieval of data for the client systems. As caching often needs to be transparent from the perspectives of client systems, for the client systems that are utilizing NFS for data access, the cache servers must also be implemented and accessed via the NFS protocol. Thus, the limitations of the NFS protocol also affect the performance of cache servers with respect to bandwidth bottlenecks and scalability.